package co.udistrital.dao;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;

import co.udistrital.model.Persona;

//Clase Singleton
public class SaveDataImp implements ISaveData{

	private static SaveDataImp instance;
	
	private SaveDataImp(){}
	
	public static SaveDataImp getInstance()
	{
		if (instance == null)
			instance = new SaveDataImp();
		return instance;
	}
	public void savePersona(Persona persona) {

		FileReader archivo = null;

		try {
			archivo = new FileReader("c://personas.txt");
		} catch (IOException e)
		{
			//El archivo se crea de no existir
			BufferedWriter outfile;
			try{
				outfile = new BufferedWriter (new FileWriter("c://personas.txt"));
				outfile.write("Archivo de Datos de Personas" + "\n");
				outfile.close();
				archivo = new FileReader("c://personas.txt");
			}catch (IOException ex)
			{
				ex.printStackTrace();
			}
		}
		BufferedReader entrada = new BufferedReader(archivo);
		String datos = "";
		String s;
		try{
			//se lee hasta el final del archivo
			while ((s = entrada.readLine()) != null)
			{
				datos = datos + s + "\n";			
			}

			BufferedWriter outfile = new BufferedWriter (new FileWriter("c://personas.txt"));
			String personaStr = persona.getNombres() + ";" 
								+ persona.getApellidos() + ";" 
								+ persona.getTelefono() + "\n";
			outfile.write(datos);
			outfile.write(personaStr);
			outfile.close();
			archivo.close();
		}catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	public void deleteTelephone(String telefono) throws IOException {

		//Buffer de entrada y salida
		FileWriter archivoW = null;
		FileReader archivoR = null;
		
		//prueba si existe el archivo de personas, 
		try {
			archivoR = new FileReader("c://personas.txt");
			try{
				//prueba si existe algun archivo de prueba
				archivoW = new FileWriter("c://personas1.txt");
			}catch (IOException ex)
			{
				//si no existe lo crea y lo deja listo para hacer el traspaso
				BufferedWriter outfile;
				outfile = new BufferedWriter (new FileWriter("c://personas1.txt"));
				outfile.close();
				archivoW = new FileWriter("c://personas1.txt");
			}
			
		} catch (IOException e)
		{
			System.out.println("El archivo no existe");
		}
		
		//se abren los dos archivos, uno de lectura y otro de escritura
		BufferedWriter salida = new BufferedWriter(archivoW);
		BufferedReader entrada = new BufferedReader(archivoR);
		
		String datos = "";
		String s;
		StringTokenizer tok;   //token para la lectura de los datos
		String nombres;		
		String apellidos;
		String ntelefono;
		//lectura del encabezado

		
		try{
					
			//se ingresa el encabezado del archivo en el temporal
	
			String encabezado = entrada.readLine();
			salida.write(encabezado + "\n");
			
			//Se leen linea por linea para comparar
			while ((s = entrada.readLine()) != null)
			{
				tok = new StringTokenizer (s,";");
				nombres = tok.nextToken();
				apellidos = tok.nextToken();
				ntelefono = tok.nextToken();
				
				//si no es el telefono que buscamos se escribe en el archivo temporal 
				if ((ntelefono.compareTo(telefono)) < 0)
					salida.write(s + "\n");
			}
			//se cierra el archivo normal
			entrada.close();
			archivoR.close();
			
			//se cierra el archivo temporal
			salida.close();
			archivoW.close();
			
		}catch (IOException e)
		{
			e.printStackTrace();
		}
		
		//se inicia la manipulacion de archivos
		File Ftemp = new File("c://personas1.txt");
		File FAnt = new File("c://personas.txt");
		
		//se borra el archivo viejo
		if(FAnt.delete() == false)
			System.out.println("No se borro el archivo");
		
		//Se renombra el archivo temporal con el nombre del archivo normal
		if(Ftemp.renameTo(FAnt) == false)
			System.out.println("No se Renombro el archivo");
		
		//se borra el archivo temporal
		if(Ftemp.delete() == false)
			System.out.println("No se Borro Temporal");
		
		
	}
	

}
